﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace eDEX_UI_Plus
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            try
            {
                // 通过类名查找一个窗口，返回窗口句柄。
                IntPtr programIntPtr = Win32.FindWindow("Progman", null);

                // 窗口句柄有效
                if (programIntPtr != IntPtr.Zero)
                {
                    IntPtr result = IntPtr.Zero;

                    // 向 Program Manager 窗口发送 0x52c 的一个消息，超时设置为0x3e8（1秒）。
                    Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result);

                    // 遍历顶级窗口
                    Win32.EnumWindows((hwnd, lParam) =>
                    {
                        // 找到包含 SHELLDLL_DefView 这个窗口句柄的 WorkerW
                        if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero)
                        {
                            // 找到当前 WorkerW 窗口的，后一个 WorkerW 窗口。 
                            IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null);

                            // 隐藏这个窗口
                            Win32.ShowWindow(tempHwnd, 0);
                        }
                        return true;
                    }, IntPtr.Zero);
                }

                // 指定启动exe
                string exePath = @"eDEX-UI.exe";
                // 启动新进程
                Process p = new Process();
                p.StartInfo.FileName = exePath;
                p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                p.Start();
                // 获取进程句柄
                while (p.MainWindowHandle.ToInt32() == 0)
                {
                    System.Threading.Thread.Sleep(100);
                }
                // 设置进程句柄到桌面
                Win32.SetParent(p.MainWindowHandle, programIntPtr);

                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
